// #include <stdio.h>
// int main()
// {
//     int j,k,s,m;
//     for(k=1;k<7;k++)
//     {
//         s=1;
//         m=k+2;
//         for(j=k;j<m;j++,k++)
//         s+=j;//内层循环结束后，返回到上面外循环的k++,k的值再加一，再重新进入条件判断
//     }
//     printf("s=%d\tk=%d\n",s,k);//s=10,k=7,k=7我知道了，但是s=10为什么呢？
//     return 0;
// }
// 第 1 次外层 for 循环（k = 1）
// s = 1：s 初始化为 1。
// m = k + 2 = 1 + 2 = 3：m 赋值为 3。
// 内层 for 循环：
// 初始 j = k = 1，满足 j < m（1 < 3），执行循环体 s += j，此时 s = 1 + 1 = 2。
// 执行 j++ 和 k++，j 变为 2，k 变为 2。
// 再次判断 j < m（2 < 3），执行循环体 s += j，此时 s = 2 + 2 = 4。
// 执行 j++ 和 k++，j 变为 3，k 变为 3。
// 此时 j < m 不成立（3 >= 3），内层循环结束。
// 第 2 次外层 for 循环（k = 4）
// 由于上一次内层循环结束后 k 变为 3，外层 for 循环末尾有 k++，所以 k 变为 4。

// s = 1：s 重新初始化为 1。
// m = k + 2 = 4 + 2 = 6：m 赋值为 6。
// 内层 for 循环：
// 初始 j = k = 4，满足 j < m（4 < 6），执行循环体 s += j，此时 s = 1 + 4 = 5。
// 执行 j++ 和 k++，j 变为 5，k 变为 5。
// 再次判断 j < m（5 < 6），执行循环体 s += j，此时 s = 5 + 5 = 10。
// 执行 j++ 和 k++，j 变为 6，k 变为 6。
// 此时 j < m 不成立（6 >= 6），内层循环结束。
// 第 3 次外层 for 循环（k = 7）
// 上一次内层循环结束后 k 变为 6，外层 for 循环末尾有 k++，k 变为 7，此时 k < 7 条件不成立，外层循环结束。



// #include <stdio.h>
// int fun(int *arr,int sz)
// {
//     int min=*arr;
//     for(int i=0;i<sz;i++)
//     {
//         // if(*arr<min)
//         // {
//         //     min=*arr;
//         // }
//         // arr++;
//         if(*(arr+i)<min)
//         {
//             min=*(arr+i);
//         }
//     }
//     return min;
// }
// int main()
// {
//     int arr[]={4,3,9,4,12,5,8,7,11,10};
//     int sz=sizeof(arr)/sizeof(arr[0]);
//     int min=fun(arr,sz);
//     printf("%d\n",min);
//     return 0;
// }



// #include <stdio.h>
// #include <string.h>
// int main()
// {
//     char arr[20];
//     char* p="helloworld";
//     strncpy(arr,p,5);//最多拷贝5个字符,决定上限，少于五个也行
//     printf("%s\n",arr);
//     return 0;
// }



// #include <stdio.h>//模拟实现strncpy函数,即字符串的拷贝,num表示拷贝的字符的上限个数
// char* my_strncpy(char* dest,const char* src,int num)//*dest是可以修改的，不用加const
// {
//     char* ret=dest;
//     while(num--&&*src!='\0')
//     {
//         *dest=*src;
//         dest++;
//         src++;
//     }
//     return ret;
// }
// int main()
// {
//     char arr[20]={0};
//     char* p="helloworld";
//     printf("%s\n",my_strncpy(arr,p,5));
//     printf("%s\n",arr);
//     return 0;
// }



// #include <stdio.h>
// char* my_strncat(char* dest,const char* src,int num)
// {
//     char* ret=dest;
//     while(*dest!='\0')
//     {
//         dest++;
//     }
//     while(num--&&*src!='\0')
//     {
//         *dest=*src;
//         dest++;
//         src++;
//     }
//     *dest='\0';
//     return ret;
// }
// int main()
// {
//     char arr[20]="abcdef";
//     char* p="helloworld";
//     printf("%s\n",my_strncat(arr,p,5));
//     printf("%s\n",arr);
//     return 0;
// }



// #include <stdio.h>
// #include <string.h>
// int main()
// {
//     int arr[10];
//     int arr2[]={1,2,3,4,5,6,7,8};
//     memcpy(arr,arr2,6*sizeof(int));
//     for(int i=0;i<6;i++)
//     {
//         printf("%d ",arr[i]);
//     }
//     printf("\n");
//     char arr3[20];
//     char arr4[]="helloworld";
//     memcpy(arr3,arr4,5*sizeof(char));
//     printf("%s\n",arr3);
//     return 0;
// }




#include <stdio.h>//模拟实现memcpy函数,即内存的拷贝,num表示拷贝的字节数
void* my_memcpy(void* dest,const void* src,size_t num)
{
    char* ret=(char*)dest;
    while(num--)
    {
        *(char*)dest=*(const char*)src;
        dest=(char*)dest+1;
        src=(const char*)src+1;
    }
    return ret;
}
int main()
{
    int arr[10];
    int arr2[]={1,2,3,4,5,6,7,8};
    my_memcpy(arr,arr2,6*sizeof(int));
    for(int i=0;i<6;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
    char arr3[20];
    char arr4[]="helloworld";
    my_memcpy(arr3,arr4,5*sizeof(char));
    printf("%s\n",arr3);
    return 0;
}